#!/usr/bin/env python
PACKAGE = "dynamic_tutorials"

#首先需要导入dynamic_reconfigure功能包提供的参数生成器parameter_generator
from dynamic_reconfigure.parameter_generator_catkin import *

#然后创建一个参数生成器gen
gen = ParameterGenerator()

#接下来就是需要定义的动态参数了，生成参数可以使用参数生成器的add(name, type, level, description, default, min,max)方法实现
#name：参数名，使用字符串描述；
#type：定义参数的类型，可以是int_t, double_t, str_t, 或者bool_t；
#level：需要传入参数动态配置回调函数中的掩码，在回调函数中会修改所有参数的掩码，表示参数已经进行修改；
#description：描述参数作用的字符串；
#default：设置参数的默认值；
#min/max：可选，设置参数的最小/大值，对于字符串和布尔类型值不生效；
gen.add("int_param",    int_t,    0, "An Integer parameter", 50,  0, 100)
gen.add("double_param", double_t, 0, "A double parameter",    .5, 0,   1)
gen.add("str_param",    str_t,    0, "A string parameter",  "Hello World")
gen.add("bool_param",   bool_t,   0, "A Boolean parameter",  True)

#也可以使用如下方法生成一个枚举类型的值
#这里定义了一个int_t类型得到参数“size”，该参数的值可以通过一个枚举列出来。
#枚举的定义使用enum方法进行定义，其中使用const方法定义每一个枚举值的名称、类型、值、描述字符串
size_enum = gen.enum([ gen.const("Small",      int_t, 0, "A small constant"),
                       gen.const("Medium",     int_t, 1, "A medium constant"),
                       gen.const("Large",      int_t, 2, "A large constant"),
                       gen.const("ExtraLarge", int_t, 3, "An extra large constant")], "An enum to set size")
gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)

#最后一行代码用于生成所有C++和Python相关的文件并且退出程序
#这里第二个参数表示动态参数运行的节点名，第三个参数是生成文件所使用的前缀，需要和配置文件名相同
exit(gen.generate(PACKAGE, "dynamic_tutorials", "Tutorials"))

